package com.kgc.scd.service;

import com.kgc.scd.util.PageSupport;
import com.kgc.scd.vo.ShopCartVO;
import com.kgc.scd.vo.ShopGoodsVO;
import org.springframework.cloud.netflix.feign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;

import java.util.List;

/**
 * Created On : 2022/11/16 0016.
 * <p>
 * Author : shiguangchuan
 * <p>
 * Description: 购物车远程调用接口
 */
@FeignClient(value = "wyyxmall-sgc-server")
public interface ShopCartFeignService {

    /**
     * @author : shiguangchuan
     * @date   : 2022/11/16 0016
     * @param  : [userId, goodsId, cartNumber]
     * @return : boolean
     * @description : 添加商品到购物车
     */
    @PostMapping("/sgcServer/insertCart")
    boolean feignInvokeInsertShopCart(@RequestParam("userId") String userId,
                                      @RequestParam("goodsId") String goodsId,
                                      @RequestParam("cartNumber") Integer cartNumber);


    /**
     * @author : shiguangchuan
     * @date   : 2022/11/16 0016
     * @param  : [userId, goodsId, cartNumber]
     * @return : boolean
     * @description : 调用远程接口，修改购物车中某单品的数量 
     */
    @PostMapping("/sgcServer/updateCart")
    boolean feignInvokeUpdateShopCart(@RequestParam("userId") String userId,
                                      @RequestParam("goodsId") String goodsId,
                                      @RequestParam("cartNumber") Integer cartNumber);

    /**
     * @author : shiguangchuan
     * @date   : 2022/11/16 0016
     * @param  : [ids]
     * @return : boolean
     * @description : 删除单个或多个购物车信息 
     */
    @PostMapping("/sgcServer/deleteCart")
    boolean feignInvokeDeleteCartByIds(@RequestParam("ids") List<String> ids);
    
    /**
     * @author : shiguangchuan
     * @date   : 2022/11/16 0016
     * @param  : [userId]
     * @return : boolean
     * @description : 清楚购物车全部商品 
     */
    @PostMapping("/sgcServer/deleteAllCart")
    boolean feignInvokeDeleteAllCart(@RequestParam("userId") String userId);
    
    /**
     * @author : shiguangchuan
     * @date   : 2022/11/16 0016
     * @param  : [id]
     * @return : boolean
     * @description : 对购物车选取状态的操作（单选操作） 
     */
    @PostMapping("/sgcServer/updateCartStatus")
    boolean feignInvokeUpdateCartOneStatus(@RequestParam("id") String id);
    
    /**
     * @author : shiguangchuan
     * @date   : 2022/11/16 0016
     * @param  : [userId, allStatus]
     * @return : boolean
     * @description : 带入全选状态来进行购物车的全选操作（全选操作） 
     */
    @PostMapping("/sgcServer/updateAllCartStatus")
    boolean feignInvokeUpdateAllCartStatus(@RequestParam("userId") String userId,
                                           @RequestParam("allStatus") Integer allStatus);

    /**
     * @author : shiguangchuan
     * @date   : 2022/11/16 0016
     * @param  : [userId]
     * @return : java.lang.Double
     * @description : 查询购物车选中商品的总价 
     */
    @GetMapping("/sgcServer/sumCart")
    Double feignInvokeSelectSumCart(@RequestParam("userId") String userId);
    
    /**
     * @author : shiguangchuan
     * @date   : 2022/11/17 0017
     * @param  : [pageNo, pageSize, userId]
     * @return : com.kgc.scd.util.PageSupport<java.util.Map<com.kgc.scd.vo.ShopCartVO,com.kgc.scd.vo.ShopGoodsVO>>
     * @description : 购物车页面展示 
     */
    @GetMapping("/sgcServer/getCartList")
    PageSupport<List<ShopCartVO>> feignInvokeSelectCartList(@RequestParam("pageNo") Integer pageNo,
                                                            @RequestParam("pageSize") Integer pageSize,
                                                            @RequestParam("userId") String userId);

    /**
     * @author : shiguangchuan
     * @date   : 2022/11/22
     * @param  : [userId]
     * @return : java.lang.Long
     * @description : 远程调用接口获取用户的购物车数量
     */
    @GetMapping("/sgcServer/getCartCount")
    Long feignInvokeSelectCartCount(@RequestParam("userId") String userId);
}
